package logicaPresentacion;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import logicaNegocio.GestionAdministrador;
import logicaNegocio.Grado;


public class FormularioGrado  extends JInternalFrame implements ActionListener
{
    
      
    /**
	 * 
	 */
	private static final long serialVersionUID = 4566498807430129781L;
	private String eleccion;
	private JButton btnCancelar,btnGuardar;
    private GestionAdministrador GAd;
	private JLabel jlbNombre,jlbExplicacion,jlbPrecio,jlbCampus;       
	private JTextField  jtfNombre,jtfExplicacion,jtfPrecio;    
	private JComboBox<String>   jcbCampus,jcbGrados;
	private Box boxVCamposVentana;
	private JPanel panBotones;  
	private ClaseAObservar observable;
    private boolean excepcion = false;
	
    public FormularioGrado (GestionAdministrador GAd,String eleccion, ClaseAObservar observable)
    {
        super("Introduzca los datos del grado");
        setSize(400,400);
        this.GAd = GAd;
        this.eleccion =eleccion;
        this.observable = observable;
        
        Box boxVContenidoVerticalVentana = Box.createVerticalBox();
        
        Box boxHNombre =  Box.createHorizontalBox();
        jlbNombre = new JLabel("Nombre del Grado");   jtfNombre = new JTextField(15);
        boxHNombre.add(Box.createHorizontalStrut(10));
        boxHNombre.add(jlbNombre);
        boxHNombre.add(Box.createHorizontalStrut(20));
        boxHNombre.add(jtfNombre);
        JPanel panNombre =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panNombre.add(boxHNombre);

        Box boxHPrecio =  Box.createHorizontalBox();
        
        jlbPrecio = new JLabel("Precio del Grado (6000-10000) ");   jtfPrecio = new JTextField(10);
        boxHPrecio.add(Box.createHorizontalStrut(10));
        boxHPrecio.add(jlbPrecio );
        boxHPrecio.add(Box.createHorizontalStrut(11));
        boxHPrecio.add(jtfPrecio);
        JPanel panPrecio =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panPrecio.add(boxHPrecio);

        Box boxHExplicacion =  Box.createHorizontalBox();
        jlbExplicacion = new JLabel("Breve explicacion ");   jtfExplicacion = new JTextField(15);
        boxHExplicacion.add(Box.createHorizontalStrut(10));
        boxHExplicacion.add(jlbExplicacion);
        boxHExplicacion.add(Box.createHorizontalStrut(11));
        boxHExplicacion.add(jtfExplicacion);
        JPanel panExplicacion =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panExplicacion.add(boxHExplicacion);
        
        boxVCamposVentana = Box.createVerticalBox();
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panNombre);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panExplicacion);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panPrecio);
        
        if (eleccion == "Anadir")
        {
	        Box boxHCampus =  Box.createHorizontalBox();
	        jlbCampus = new JLabel("Campus ");   jcbCampus= new JComboBox<String>();
	        jcbCampus.addActionListener(this);
	        
			for(int i = 0 ; i<GAd.getcampus().size(); i++)
			{
				String Nombre = GAd.getCampus(i);
				jcbCampus.addItem(Nombre);
	        }
			
			boxHCampus.add(Box.createHorizontalStrut(10));
			boxHCampus.add(jlbCampus);
			boxHCampus.add(Box.createHorizontalStrut(40));
			boxHCampus.add(jcbCampus);
	        JPanel panCampus =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
	        panCampus.add(boxHCampus);
	        boxVCamposVentana.add(Box.createVerticalStrut(10));
            boxVCamposVentana.add(panCampus);
        }
        
        Box boxHBotones = Box.createHorizontalBox();

        btnGuardar = new JButton("Guardar");
        btnCancelar = new JButton("Cancelar");
        btnGuardar.addActionListener(this);
        btnCancelar.addActionListener(this);
        
        boxHBotones.add(btnGuardar);
        boxHBotones.add(Box.createHorizontalStrut(20));
        boxHBotones.add(btnCancelar);
        boxHBotones.add(Box.createHorizontalStrut(40));

        if (eleccion == "Actualizar")
        {
        	Map <String,Grado> grados = GAd.getGrados();
        	Box boxHGrados =  Box.createHorizontalBox();
            JLabel jlbGrados;
            
            jlbGrados = new JLabel("Elige el Grado ");   jcbGrados = new JComboBox<String>();
            jcbGrados.addActionListener(this);
            Iterator<Entry<String, Grado>> I = grados.entrySet().iterator();
    	
    		while (I.hasNext()) 
    	    {
    	    Entry<String, Grado> e = I.next();
    	    Grado g = (Grado) grados.get (e.getKey());
            String Nombre = g.getNombreGrado();
            jcbGrados.addItem(Nombre);
            }
    		
    		boxHGrados.add(Box.createHorizontalStrut(10));
    		boxHGrados.add(jlbGrados);
    		boxHGrados.add(Box.createHorizontalStrut(40));
    		boxHGrados.add(jcbGrados);
            JPanel panGrados =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
            panGrados.add(boxHGrados);
            
            boxVCamposVentana.add(Box.createVerticalStrut(10));
            boxVCamposVentana.add(panGrados);
        }
        
        panBotones =  new JPanel(new FlowLayout(FlowLayout.RIGHT) );
        panBotones.add(boxHBotones);
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(30));
        boxVContenidoVerticalVentana.add(boxVCamposVentana);

        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(20));
        boxVContenidoVerticalVentana.add(panBotones);

        add(boxVContenidoVerticalVentana);
        
        setVisible(true); 
    }
    
    public void actionPerformed(ActionEvent e) 
	{
		if (e.getSource() instanceof JButton) 
		{
			JButton btnPulsado=(JButton)e.getSource();

			if (btnPulsado==btnGuardar) 
			{
				if (("".equals(jtfNombre.getText()))||("".equals(jtfPrecio.getText()))||("".equals(jtfExplicacion.getText())))
	            {
					JOptionPane.showMessageDialog(this,"Rellene todos los campos del formulario","Advertencia",JOptionPane.WARNING_MESSAGE);
	            }
				else
				{
					try
                    {
                    	int precio = Integer.parseInt(jtfPrecio.getText());
                    	tamanoPrecio(jtfPrecio.getText());
                    }
                    catch(ExcepcionTamano eftlf)
                    {
                    	JOptionPane.showMessageDialog(this,"Error de formato en el precio, debe estar entre 6.000 y 10.000 euros","Error",JOptionPane.ERROR_MESSAGE);
                    	excepcion=true;
                    }
                    catch(NumberFormatException nfe)
                    {
                
                    	JOptionPane.showMessageDialog(this,"Error de formato en el precio, debe ser un numero","Error",JOptionPane.ERROR_MESSAGE);
                    	excepcion=true;
                    }
					if(excepcion ==false)
                    {
						if (eleccion == "Anadir")
						{	
		                    GAd.anadirGrado(jtfNombre.getText(), jtfExplicacion.getText(),jtfPrecio.getText(),jcbCampus.getSelectedIndex() ); 
		                    observable.setTabla();
		                    dispose();
						}
		            	
					  if (eleccion == "Actualizar")
	            		{
						    GAd.actualizarGrado(jtfNombre.getText(), jtfExplicacion.getText(),jtfPrecio.getText(),jcbGrados.getSelectedIndex() ); 
						    observable.setTabla();
						    dispose();
						}
                    }
                    else
                    {
                    	excepcion = false;
                    } 
				}
			}
			else if (btnPulsado==btnCancelar) 
			{
				dispose();
			}						
		}	
	}
    public void tamanoPrecio(String precio)throws ExcepcionTamano
    {
    	int num = Integer.parseInt(precio);
    	if((num<6000)||(num>10000))
    	{
    		throw new ExcepcionTamano();
    	}
    }
}